package main

import (
	"fmt"
	"sync"
	"time"
)

var (
	counter int32          // 共享变量：多个协程会同时访问
	wg      sync.WaitGroup // 用于等待所有协程结束
)

func incrementNonAtomic() {
	defer wg.Done()

	// 模拟更明显的冲突：休眠让调度器有机会切换协程
	time.Sleep(time.Microsecond)

	// 非原子操作：实际上拆解为「读 → 加 → 写」三步
	counter++ // counter = counter + 1
}

func main() {
	const goroutines = 1000
	counter = 0
	wg.Add(goroutines)

	for i := 0; i < goroutines; i++ {
		go incrementNonAtomic()
	}

	wg.Wait()
	fmt.Printf("非原子加法期望值=%d，实际值=%d\n", goroutines, counter)
	fmt.Println("多运行几次会看到 counter < goroutines，说明发生了脏写。")
	fmt.Println("建议使用 go run -race main.go 检测数据竞争。")
}
